package com.chapter7.neibulei.demo10;

public class MyWindow {
    public static String arg="this is my window";
    private Button bt1=new Button("Button 1");
    private Button bt2=new Button("Button 2");

    //内部类，实现了ClickHandler接口接口的onClick方法
    private class Btn1ClickHandler implements ClickHandler{
        @Override
        public void onClick() {

            System.out.println(bt1.getName()+" click");
        }
    }


    //匿名内部类，实现ClickHandler接口的onClick方法
    private ClickHandler btn2ClickHandler = new ClickHandler(){
        public void onClick() {
            System.out.println(bt2.getName()+" click");
            //由于内部类和匿名内部类都可以访问外部类中的所有成员，可以修改MyWindow的bt1对象的名字。
            bt1.setName(arg);
        };
    };

    public MyWindow(){
        //new Btn1ClickHandler() 生成的对象向上转型Clickhandler接口类型，
        // 并通过Button类的registerHandler方法 将ClickHandler传递给MyWindow中的两个Button对象（btn1和btn2）
        bt1.registeHandler(new Btn1ClickHandler());
        bt2.registeHandler(btn2ClickHandler);
    }

    public void run(){
        bt1.click();
        bt2.click();
        System.out.println(bt1.getName());
        System.out.println(bt2.getName());
    }

    public static void main(String[] args) {
        MyWindow myWindow =new MyWindow();
        //当MyWindow类的run方法调用两个Button对象的click方法时，这两个对象就分别调用Btn1ClickHandler类和匿名内部类对象的onClick方法。
        myWindow.run();
    }
}
